<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>添加索引 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_add-an-index.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_add-an-index.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_add-an-index.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_add-an-index.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">基础入门</a></span>
»
<span class="breadcrumb-link"><a href="distributed-cluster.html">分布式集群</a></span>
»
<span class="breadcrumb-node">添加索引</span>
</div>
<div class="navheader">
<span class="prev">
<a href="cluster-health.html">« 集群健康</a>
</span>
<span class="next">
<a href="_add_failover.html">添加故障转移 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_add-an-index"></a>添加索引<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/020_Distributed_Cluster/15_Add_an_index.asciidoc">edit</a>
</h2>
</div></div></div>
<p>我们往 Elasticsearch 添加数据时需要用到 <em>索引 (index)</em> —— 保存相关数据的地方。
索引实际上是指向一个或者多个物理 <em>分片 (shard)</em> 的 <em>逻辑命名空间</em> 。</p>
<p>一个 <em>分片</em> 是一个底层的 <em>工作单元</em> ，它仅保存了全部数据中的一部分。

在<a class="xref" href="inside-a-shard.html" title="分片内部原理"><code class="literal">分片内部机制</code></a>中，我们将详细介绍分片是如何工作的，而现在我们只要知道一个分片是一个 Lucene 的实例，而且它本身就是一个完整的搜索引擎。
我们的文档被存储和索引到分片内，但是应用程序是直接与索引而不是与分片进行交互。</p>

<p>Elasticsearch 是利用分片将数据分发到集群内各处的。看分片看成是数据的容器。文档保存在分片内，分片又被分配到集群内的各个节点里。
当你的集群规模扩大或者缩小时，Elasticsearch 会自动的在各节点之间迁移分片，使得数据仍然均匀分布在集群里。</p>

<p>一个分片可以是 <em>主 (primary)</em> 分片或者 <em>副本 (replica)</em> 分片。
索引内任意一个文档都归属于一个主分片，所以主分片的数目决定着索引能够保存的最大数据量。</p>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>技术上来说，一个主分片最大能够存储 Integer.MAX_VALUE - 128 个文档，但是实际的最大值依赖于你的使用场景：使用的硬件、文档的大小和复杂程度、索引和查询文档的方式以及期望的响应时长。</p>
</div>
</div>
<p>副本分片只是主分片的一个拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份，并为搜索和检索文档等读操作提供服务。</p>

<p>主分片的数量在索引建立的时候就已经确定了，但是副本分片的数量可以随时修改。</p>

<p>让我们在包含一个空节点的集群内创建名为 <code class="word">blogs</code> 的索引。

默认情况下，索引会被分配 5 个主分片，但是为了演示目的，我们将分配 3 个主分片和 1 份副本（每个主分片拥有一个副本分片）：</p>
<div class="pre_wrapper lang-sense">
<pre class="programlisting prettyprint lang-sense">PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}</pre>
</div>
<div class="sense_widget" data-snippet="snippets/020_Distributed_Cluster/15_Add_index.json"></div>
<p>集群现在看起来像<a class="xref" href="_add-an-index.html#cluster-one-node" title="拥有一个索引的单节点集群">图 2, “拥有一个索引的单节点集群”</a>。所有 3 个主分片都被分配在<code class="word">Node 1</code>上。</p>
<div id="cluster-one-node" class="imageblock">
<div class="content">
<img src="../images/elas_0202.png" alt="拥有一个索引的单节点集群">
</div>
<div class="title">图 2. 拥有一个索引的单节点集群</div>
</div>
<p>如果我们现在查看<a class="xref" href="cluster-health.html" title="集群健康"><code class="literal">cluster-health</code></a>，我们将看到如下内容：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
  "cluster_name": "elasticsearch",
  "status": "yellow", <a id="CO8-1"></a><i class="conum" data-value="1"></i>
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 3,
  "active_shards": 3,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 3, <a id="CO8-2"></a><i class="conum" data-value="2"></i>
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO8-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>集群 <code class="literal">status</code> 值为 <code class="literal">yellow</code> 。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO8-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>没有被分配到任何节点的副本分片数。</p>
</td>
</tr>
</table>
</div>
<p>集群的健康状况为 <code class="literal">yellow</code> 则表示全部 <em>主 (primary)</em> 分片都正常运行（集群可以正常服务所有请求），但是 <em>副本</em> 分片没有全部处在正常状态。

实际上，所有 3 个副本分片都是 <code class="literal">unassigned</code> —— 它们都还没有被分配到任何节点。

在同一个节点上存储相同数据的副本是没有意义的，因为一旦失去了那个节点，我们也将丢失该节点上的所有副本数据。</p>

<p>现在，我们的集群功能齐全了，但是在硬件故障时有丢失数据的风险。</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="cluster-health.html">« 集群健康</a>
</span>
<span class="next">
<a href="_add_failover.html">添加故障转移 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>